/* 
 * Autores:
 *      Jonathan Lopez  11106
 *      Jorge Martínez  11237
 * 
 * Ultima revision: $Rev$
 *      Fecha: $Date$
 * 
 * Archivo: ConexionBaseDatos.java
 */

package ManejoBaseDatos;
import java.sql.*;
import org.sqlite.JDBC;



/**
 * Establece una conexion con una base de datos mediante SQLite.
 * 
 * @author Jorge
 * @author Jonathan
 */
public class ConexionBaseDatos 
{   private boolean hayConexion;
    private Connection conexionBaseDatos;

    /**
     * Constructor, inicializa todas las variables.
     */
    public ConexionBaseDatos()
    {
        hayConexion = false;
        conexionBaseDatos = null;
    }
    
    /**
     * Metodo con el cual se establece una conexion con la base de datos SQLite
     * @param archivo Ruta del archivo que contiene la base de datos.
     * @return Regresa true si la conexion se logro establecer, o false en caso
     * contrario.
     */
    public boolean Conectar( String archivo )
    {
        // Validar que haya ya una conexion establecida
        if( hayConexion )
            return true;
        
        try
        {
            //Se da la ruta donde se encuentra ubicada la base de datos
            String fileName = archivo;
            
            //Driver utilizado para lograr la conexion con la base de datos
            Class.forName("org.sqlite.JDBC");
            
            //Se declara una variable de tipo conexion para interactuar con la base de datos
            conexionBaseDatos = DriverManager.getConnection( "jdbc:sqlite:"
                    + fileName );
            
            hayConexion = true;
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
            System.out.println(e.toString());
        }
        
        return hayConexion;
    }
    
    /**
     * Método que termina la conexión con la base de datos.
     * @throws SQLException 
     */
    public void TerminarConexion() throws SQLException
    {
        if(hayConexion=true)
        {
            conexionBaseDatos.close();
            hayConexion=false;
        }
    }

    /**
     * @return Regresa true si la base de datos se encuentra conectada, o false
     * en caso contrario.
     */
    public boolean hayConexion() 
    {
        return hayConexion;
    }
    
    /**
     * @return Regresa una representacion String de la clase.
     */
    @Override
    public String toString() 
    {
        return "ConexionBaseDatos{" + "conexion=" + hayConexion + '}';
    }
    

    /**
     * Punto de entrada para las pruebas unitarias de ConexionBaseDatos.java.
     * 
     * @param args
     * @throws SQLException 
     */
    public static void main(String[] args) throws SQLException {
        ConexionBaseDatos conexion = new ConexionBaseDatos();
        
        conexion.Conectar( "CarteraVirtual.db3" );
        System.out.println(conexion.toString());
        Statement stmt = conexion.conexionBaseDatos.createStatement();
        ResultSet rs = stmt.executeQuery("select Nombres from TablaUsuarios");
        
        while (rs.next()) 
            {
            String nom = rs.getString("Nombres");// Columna 1
            /*String ape = rs.getString("Apellidos"); // Columna 2
            String contra = rs.getString("Contraseña"); // Columna 3
            String usr = rs.getString("Usuario"); // Columna 4
            int usrId = rs.getInt("IdUsuario"); // Columna 5
            //Mostramos los resultados encontrados en la base de datos
            System.out.println("ID: "+usrId+" Nombres:"+nom+" Apellidos: "+ape+
                "Contraseña: "+contra+ "Usuario: "+ usr);*/
            System.out.println("Nombres: "+nom);
            }
        
        conexion.TerminarConexion();
        rs.updateString( "Nombres", "Tuncho" );
        
        System.out.println(conexion.toString());
        
    }
}
